ヘッダーをスキップ
Oracle TimesTen In-Memory Database C開発者およびリファレンス・ガイド
リリース6.0
B25764-02
  目次へ
目次
索引へ
索引

前へ
前へ
次へ
次へ
 

その他のXLA機能

XLAには、次の機能もあります。

ブックマークの位置の変更

接続中は、随時ttXlaGetLSN関数をコールして現行読取りLSNに関してシステムに問い合せることができます。一連の更新を繰り返し実行する必要がある場合は、ttXlaSetLSN関数を使用して、読取りLSNを最後のttXlaAcknowledgeによって設定された初期読取りLSNより大きい有効な値に設定できます。ここで、「大きい」とは、比較対象のLSNが同じトランザクション内のレコードのものである場合にのみ意味を持ちます。比較対象のLSNが異なるトランザクションに属しているレコードのものである場合は、LSNの数値が大きいとしても、別のトランザクションより前にコミットされたトランザクションのLSNは小さいLSNになります。初期読取りLSNを現行読取りLSNまで進める方法は、ttXlaAcknowledge関数をコールする方法のみです。この関数によって、現行読取りLSNまでのすべてのログ・レコードを取得および処理したということが示されます。特定のブックマークに対してttXlaAcknowledgeをコールすると、現行読取りLSNより小さいLSNを持つログ・レコードにアクセスできなくなります。

アプリケーション・コンテキストの受渡し

XLA関数ではありませんが、ログに対するライターでttApplicationContextをコールして、アプリケーションに関連付けられているバイナリ・データをXLAリーダーに渡すことができます。ttApplicationContextプロシージャは、現在のトランザクションが生成する次の更新レコードに返す1つのVARBINARY値を指定します。XLAを使って更新を読み込むアプリケーションでは、「NOT INLINE可変長列データの読込み」で説明されている方法で、この値へのポインタを取得できます。

注意: コンテキスト値は1つの更新レコードのみに適用され、適用後に再設定されます。同じコンテキスト値を複数の更新に適用する場合は、各更新の前に再設定する必要があります。

コンテキストを設定するには、次の手順を実行します。

  1. ttApplicationContext関数を起動するために2つのプログラム変数を宣言します。contextBufferは、最も長いアプリケーション・コンテキストを格納できる十分な大きさを持つように宣言されたCHAR配列です。contextBufferLenは、INTEGER型の変数で、ttApplicationContextへの各コールでコンテキストの実際の長さを伝えるために使用されます。
  2. ttApplicationContext組込み関数のコンパイル済の起動によって文ハンドルを初期化します。
  3. rc = SQLPrepare(hstmt, "call ttApplicationContext(?)", SQL_NTS); 
    rc = SQLBindParameter(hstmt, 1, SQL_PARAM_INPUT, SQL_C_BINARY, 
                         SQL_VARBINARY, 0, 0, &contextBuffer,  
                         sizeof contextBuffer, &contextBufferLen); 
    
  4. アプリケーション・コンテキストを後で設定する必要がある場合は、コンテキスト値をcontextBufferにコピーし、コンテキストの長さをcontextBufferLenに割り当て、次のコールを使用してttApplicationContextを起動します。
  5. rc = SQLExecute(hstmt); 
     

    トランザクションは、SQLTransactへの通常のコールでコミットされます。

    rc = SQLTransact(NULL, hdbc, SQL_COMMIT);
注意: ttApplicationContextをコールした後にSQL処理に失敗すると、コンテキストが次の処理に渡されず、失われる可能性があります。このような問題が発生した場合は、アプリケーションで、次のSQL処理の前にttApplicationContextを再度コールできます。